/* 
 * File:   RepositorioPoller.h
 * Author: maximiliano
 *
 * Created on May 14, 2013, 6:05 PM
 */

#include <stdint.h>
#include <unistd.h>
#include "common_Thread.h"
#include "common_FileUtils.h"
#include "client_IRepositorioPollerManejadorEvento.h"
#include "common_Repositorio.h"
#include "common_Mutex.h"

using namespace TP::Archivos;
using namespace TP::Threading;

#ifndef REPOSITORIOPOLLER_H
#define	REPOSITORIOPOLLER_H

class RepositorioPoller : public Thread {

public:
   
    RepositorioPoller(Repositorio* pRepositorio, uint32_t pIntervaloPoleo);
    
    void setRepositorioPollerManejadorEvento (IRepositorioPollerManejadorEvento* pManejadorEventos);
    
    virtual ~RepositorioPoller();

    virtual void Iniciar() throw (Excepcion&);

    virtual void Finalizar() throw (Excepcion&);
    
    void evaluarArchivo(const string& pNombreArchivo);

protected:
        
    virtual void tarea ();
    
private:
    
    void setPoleando(const bool pValor);
    
    bool getPoleando();
    
    bool esArchivoNuevo(const string &pNombreArchivo);
    
    bool esArchivoModificado(const string &pNombreArchivo);
    
    bool _poleando;
    Mutex _poleandoMutex;
    Repositorio* _repositorio;
    uint32_t _intervaloPoleo;
    IRepositorioPollerManejadorEvento* manejadorEvento;
};

#endif	/* REPOSITORIOPOLLER_H */

